/* 
 * File:   Robot.h
 * Author: Piotrek
 *
 * Created on 2 maj 2010, 23:57
 */

#ifndef _ROBOT_H
#define	_ROBOT_H

#include "Module.h"
#include "RAPID/RAPID.H"
#include "StaticObject.h"
#include <vector>
#include "RobotCollisionXmlDoc.h"

/**
 * @brief Klasa reprezentujaca calego robota,
 * dziedziczy po klasie StaticObject reprezentujacej obiekt statyczny.
 */
class Robot : public StaticObject {
public:

	virtual ~Robot(){}

	/// liczebnosc tablicy PositionsBuffer
	static const int positionsBufferSize = 8;

	/// tablica przechowujaca odebrane dane z robotow o polozeniu jointow
	float PositionsBuffer[positionsBufferSize];
	bool isCubedModuleEnabled;
    /**
	 * Konstruktor wykorzystujacy plik XML do wczytania robota.
     * @param xmlDoc - obiekt typu RobotCollisionXmlDoc
	 * @param globalFilepath - sciezka do katalogu roboczego w którym znajdują się foldery z plikami *.stl
     */    
	Robot(RobotCollisionXmlDoc^ xmlDoc, System::String^ globalFilepath);

    /**
     * @brief Transformacja modułów robota
     *
     * @param updateModule   parametr okreslejacy najnizszy modul do transformacji - nalezy przetransformowac ten i wszystkie moduly powyzej     
     */
    void transform(int updateModule);
    
	/**
	 * Aktualizacja wspolrzednych trojkatow na podstawie odebranych informacji z robota
	 */
	void updatePositions();

    // cylindry:
    void translateCylModules();
	
	/** 
	* Funkcja orzekajaca w zależności od hierarchii dziedziczenia, 
	* czy należy rysować dodatkowe, przeźroczyste prostopadłościany dookoła poszczególnych modułów 
	* @param void
	* @return bool
	*/
	virtual bool drawCubedModules() const;
private:

};

#endif	/* _ROBOT_H */

